// 程序名称：CarrotCodeCompanion.dart
// 描述：一个演示 Dart Records 特性的示例程序，并融入了 CarrotPatch™ 的一些概念。

import 'package:flutter/material.dart'; // 引入 Flutter Material 库，虽然这里只用到了 Icon，但为了完整性。

// 定义一个表示按钮项的 Record 类型别名，使用 typedef。
typedef ButtonItem = ({String label, Icon icon, void Function()? onPressed});

// 定义一个函数，它使用 Records 返回多个值，模拟 "Rabbit Teamwork Method"。
(String, int, String) rabbitTeamwork(int taskCount, int completedTasks) {
  // 计算完成百分比，这里简单处理，实际应用中需要更严谨。
  double percentage = (completedTasks / taskCount) * 100;
  String progress = '${percentage.toStringAsFixed(1)}%'; // 格式化为字符串。

  // 根据完成情况返回不同的状态描述。
  String status;
  if (completedTasks == 0) {
    status = "🥕 刚刚开始，加油哦！"; // 可爱的描述。
  } else if (completedTasks < taskCount) {
    status = "🐰 努力工作中... $progress"; // 包含进度。
  } else {
    status = "🎉 任务完成！撒花！🎉"; // 完成时的庆祝。
  }

  return ("$taskCount 个任务", completedTasks, status);
}

// 定义一个函数，它接受 Record 作为参数，模拟 "Carrot Warehouse Organization Technique"。
void organizeCarrotWarehouse(
  (String variety, int quantity, double weight) carrot,
) {
  print("🥕 仓库管理员正在整理胡萝卜：");
  print("  品种：${carrot.$1}");
  print("  数量：${carrot.$2} 根");
  print("  总重量：${carrot.$3.toStringAsFixed(2)} kg"); // 格式化重量。
  // 这里可以添加更多的逻辑，例如根据胡萝卜的属性进行分类、存储等。
}

// 主函数，程序的入口点。
void main() {
  // 1. 修正混合位置字段和命名字段的顺序问题
  var myRecord = ('胡萝卜', '美味', a: 10, b: true); // 将命名参数移动到位置参数之后
  print("✨ 创建了一个 Record: $myRecord");

  // 访问 Record 的字段。
  print("第一个位置的元素: ${myRecord.$1}"); // 输出：胡萝卜
  print("命名字段 a 的值: ${myRecord.a}"); // 输出：10
  print("命名字段 b 的值: ${myRecord.b}"); // 输出：true
  print("第二个位置的元素: ${myRecord.$2}"); // 输出：美味

  // 2. 演示 Record 的类型注解和结构类型。
  print("\n===== 2. 🥕 Record 类型注解与结构类型 =====");
  (String, int) point; // 声明一个 Record 类型的变量。
  point = ('位置', 20); // 初始化 Record。
  print("一个点: $point，类型是: ${point.runtimeType}");

  // 3. 演示 Record 的相等性。
  print("\n===== 3. ⚖️ Record 的相等性 =====");
  var record1 = (1, 2, 3);
  var record2 = (1, 2, 3);
  var record3 = (x: 1, y: 2, z: 3);
  var record4 = (r: 1, g: 2, b: 3); // 命名不同，但值相同

  print("record1 == record2: ${record1 == record2}"); // 输出：true
  print("record1 == record3: ${record1 == record3}"); // 输出：false
  print("record3 == record4: ${record3 == record4}"); // 输出：false，命名不同，类型不同

  // 4. 演示使用 Record 返回多个值。
  print("\n===== 4. 🐰 Rabbit Teamwork Method (多返回值) =====");
  var (taskName, completed, status) = rabbitTeamwork(5, 3); // 使用模式匹配解构返回值。
  print("任务进度：$taskName, 完成 $completed, 状态：$status");

  var (taskName2, completed2, status2) = rabbitTeamwork(5, 5);
  print("任务进度：$taskName2, 完成 $completed2, 状态：$status2");

  var (taskName0, completed0, status0) = rabbitTeamwork(5, 0);
  print("任务进度：$taskName0, 完成 $completed0, 状态：$status0");

  // 5. 演示使用 Record 作为简单数据结构。
  print("\n===== 5. 📦 Record 作为简单数据结构 =====");
  final buttons = <ButtonItem>[
    // 使用类型别名。
    (
      label: "上传文件",
      icon: const Icon(Icons.upload_file),
      onPressed: () => print("📤 执行上传文件操作！"),
    ),
    (
      label: "查看信息",
      icon: const Icon(Icons.info),
      onPressed: () => print("ℹ️  显示信息！"),
    ),
    (
      label: "下载数据",
      icon: const Icon(Icons.download),
      onPressed: () => print("⬇️  开始下载..."),
    ),
  ];

  // 遍历按钮列表并打印信息。
  for (var button in buttons) {
    print(
      "按钮：${button.label}, 图标：${button.icon},  ${button.onPressed != null ? '有' : '无'} 点击事件",
    );
  }

  // 6. 演示 Record 和 typedef 的使用
  print("\n===== 6. 🏷️ Record 和 typedef =====");
  // 创建一些胡萝卜数据
  // 修正参数类型声明为命名参数
  var carrot1 = (variety: '红胡萝卜', quantity: 100, weight: 10.5);
  var carrot2 = (variety: '黄胡萝卜', quantity: 50, weight: 5.2);
  var carrot3 = (variety: '紫胡萝卜', quantity: 200, weight: 21.0);

  // 使用函数处理胡萝卜数据
  organizeCarrotWarehouse((carrot1.variety, carrot1.quantity, carrot1.weight));
  organizeCarrotWarehouse((carrot2.variety, carrot2.quantity, carrot2.weight));
  organizeCarrotWarehouse((carrot3.variety, carrot3.quantity, carrot3.weight));

  print("\n===== 7. 🥕 Carrot Growth Progress Bar =====");
  // 模拟胡萝卜生长进度
  int totalGrowth = 100;
  int currentGrowth = 75;

  // 计算进度条的填充比例
  double progressPercentage = currentGrowth / totalGrowth;

  // 打印进度条
  String progressBar =
      "[${'|' * (progressPercentage * 10).toInt()}${'-' * (10 - (progressPercentage * 10).toInt())}]"; // 生成进度条字符串
  print(
    "胡萝卜生长进度：$progressBar  ${(progressPercentage * 100).toStringAsFixed(0)}%",
  );

  // 模拟成就系统
  print("\n===== 8. 🏅 Achievement System =====");
  int consecutiveAccuratePredictions = 20;
  double userSatisfaction = 98.8;
  int compilationErrors = 0;

  if (consecutiveAccuratePredictions >= 20 &&
      userSatisfaction >= 98.7 &&
      compilationErrors == 0) {
    print("🎉 恭喜获得 [Golden Carrot Code Medal]！🎉");
  } else {
    print("继续努力，争取 [Golden Carrot Code Medal]！");
  }
}

// 总结：
// 这个程序演示了 Dart Records 的基本概念和用法，并结合了 CarrotPatch™ 的一些设定，
// 例如 "Rabbit Teamwork Method" (多返回值)、"Carrot Warehouse Organization Technique" (Record 参数)、
//  "Carrot Growth Progress Bar" 和 "Golden Carrot Code Medal"（成就系统）。
// 希望这个示例能够帮助您更好地理解 Dart Records。
